package heap

// 符号引用
type SymRef struct {
    cp        *ConstantPool
    className string
    class     *Class
}

//返回类符号引用
func (self *SymRef) ResolvedClass() *Class {
    if self.class == nil {
        self.resolveClassRef()
    }
    return self.class
}

// jvms8 5.4.3.1
//类符号引用的解析步骤
func (self *SymRef) resolveClassRef() {
    d := self.cp.class
    c := d.loader.LoadClass(self.className)
    if !c.isAccessibleTo(d) {
        panic("java.lang.IllegalAccessError")
    }

    self.class = c
}
